import axios from 'axios'

// 创建axios实例
const request = axios.create({
  baseURL: '/', // 基础URL，会被Vite代理到后端
  timeout: 60000, // 请求超时时间增加到60秒，适应语音处理的长时间
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
request.interceptors.request.use(
  config => {
    // 在发送请求之前做些什么
    // 可以在这里添加token等认证信息
    const token = localStorage.getItem('token')
    if (token) {
      // 后端使用 "Authorization" header
      config.headers.Authorization = token
    }
    
    console.log('发送请求:', config)
    console.log('请求头:', config.headers)
    console.log('localStorage中的token:', token)
    return config
  },
  error => {
    // 对请求错误做些什么
    console.error('请求错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
request.interceptors.response.use(
  response => {
    // 对响应数据做点什么
    console.log('收到响应原始数据:', response)
    console.log('响应数据结构:', response.data)
    
    // 通常后端会返回统一格式的数据，这里可以做统一处理
    const { data } = response
    
    // 后端返回格式为 { success: true/false, errorMsg: null/string, data: {...}, total: null/number }
    if (data && typeof data === 'object' && data.hasOwnProperty('success')) {
      if (data.success) {
        // 成功时返回data字段，如果是分页数据还会包含total
        const result = data.total !== null ? { data: data.data, total: data.total } : data.data
        console.log('响应拦截器处理后的结果:', result)
        return result
      } else {
        // 处理业务错误
        console.error('业务错误:', data.errorMsg)
        return Promise.reject(new Error(data.errorMsg || '请求失败'))
      }
    } else {
      // 如果后端直接返回数据（没有success包装），直接返回原始数据
      console.log('后端直接返回数据，无success包装:', data)
      return data
    }
  },
  error => {
    // 对响应错误做点什么
    console.error('响应错误:', error)
    
    // 处理HTTP状态码错误
    if (error.response) {
      const { status } = error.response
      switch (status) {
        case 401:
          // 未授权，清除token并跳转到登录页
          localStorage.removeItem('token')
          // 这里可以使用路由跳转到登录页
          console.error('未授权，请重新登录')
          break
        case 403:
          console.error('禁止访问')
          break
        case 404:
          console.error('请求的资源不存在')
          break
        case 500:
          console.error('服务器内部错误')
          break
        default:
          console.error(`请求失败，状态码: ${status}`)
      }
    } else if (error.request) {
      console.error('网络错误，请检查网络连接')
    } else {
      console.error('请求配置错误:', error.message)
    }
    
    return Promise.reject(error)
  }
)

export default request